home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 4
/
Aminet 4 - November 1994.iso
/
aminet
/
comm
/
misc
/
mirrorman_1_10b1.lha
/
MirrorManager-1.10b1
/
rexx
/
Configure.rexx
< prev
next >
Wrap
OS/2 REXX Batch file
|
1994-06-24
|
5KB
|
208 lines
/*
** $VER: $Id: Configure.rexx,v 1.5 1994/04/26 23:36:22 tf Exp $
**
** Initial revision by Tobias Ferber, 17.4.94
**
** This script replaces the lines between the first two DELIMITER comments in a
** MirrorManager configuration script by the contents of a given file.
*/
OPTIONS FAILAT 10
/**/
scriptfile = ""
insertfile = ""
tempfile = "T:ConfigureTemp." || pragma('Id')
template = "READ/S,SCRIPT/K/A,WITH/K,DELIMITER/K,TERMINATOR/K,RESET/S"
delimiter = "/*@*/"
terminator = "/* END */"
args = ""
cliopts = ""
/* parse args */
IF ( ARG() < 1 ) | ( (ARG() = 1) & (ARG(1)='?') ) THEN DO
OPTIONS PROMPT template': '
PARSE PULL args
END
ELSE DO n=1 FOR ARG() /* RXFB_TOKEN for RX ?! */
args= args || ARG(n)
END
DO WHILE WORDS(args) > 0
av= next_arg()
SELECT
WHEN UPPER(av) = "SCRIPT" THEN DO
IF WORDS(args) > 0 THEN DO
scriptfile= next_arg()
END
ELSE EXIT bad_args("Missing filename after SCRIPT keyword")
end /* SCRIPT */
WHEN UPPER(av) = "WITH" THEN DO
IF WORDS(args) > 0 THEN DO
insertfile= next_arg()
END
ELSE EXIT bad_args("Missing filename after WITH keyword")
end /* WITH */
WHEN UPPER(av) = "DELIMITER" THEN DO
IF WORDS(args) > 0 THEN DO
delimiter= next_arg()
END
ELSE EXIT bad_args("Missing delimiter string after DELIMITER keyword")
end /* DELIMITER */
WHEN UPPER(av) = "TERMINATOR" THEN DO
IF WORDS(args) > 0 THEN DO
terminator= next_arg()
END
ELSE EXIT bad_args("Missing terminator string after TERMINATOR keyword")
end /* TERMINATOR */
WHEN UPPER(av) = "READ" THEN cliopts= cliopts || 'r'
WHEN UPPER(av) = "RESET" THEN cliopts= cliopts || 'c'
OTHERWISE DO
IF av ~= '?' THEN EXIT bad_args("Unknown keyword" av)
ELSE EXIT bad_args("")
END
END /* SELECT */
END /* DO */
/**/
CALL PRAGMA('W','N')
IF WORDS(scriptfile) < 1 THEN EXIT bad_args("Missing SCRIPT filename")
IF ~EXISTS(scriptfile) THEN DO
SAY 'Failed to locate your TO file "'scriptfile'"'
EXIT 10
END
IF POS('r',cliopts) < 1 THEN DO
IF WORDS(insertfile) < 1 THEN EXIT bad_args("Missing WITH filename")
IF ~EXISTS(insertfile) THEN DO
SAY 'Failed to locate your FROM file "'insertfile'"'
EXIT 10
END
END
/**/
IF OPEN('out',tempfile,'W') THEN DO
IF OPEN('in',scriptfile,'R') THEN DO
line= ""
DO WHILE (line ~= delimiter) &~ EOF('in')
line= STRIP( READLN('in') )
CALL WRITELN('out',line)
END
IF line ~= delimiter THEN EXIT buythefarm('Parse Error 1 in "'scriptfile'"')
IF POS('r',cliopts) > 0 THEN DO
line= ""
DO WHILE (line ~= delimiter) &~ EOF('in')
line= STRIP( READLN('in') )
IF (line ~= delimiter) THEN DO
IF (LEFT(line,1) = '(') & (RIGHT(line,1) = ')') THEN DO /* Installer script */
PARSE VAR line '(set' var val ')' .
IF POS('c',cliopts) > 0 THEN SAY '(set' LEFT(STRIP(var),20) '"")'
ELSE SAY LEFT(STRIP(var),20) '=' val
END
ELSE IF POS('=',line) > 0 THEN DO /* ARexx script */
PARSE VAR line lhs '=' rhs
IF POS('c',cliopts) > 0 THEN SAY LEFT(strip(lhs),20) '= ""'
ELSE SAY '(set' lhs rhs')'
END
/*ELSE EXIT buythefarm('Parse Error 2 in "'scriptfile'"')*/
END
END
IF line ~= delimiter THEN EXIT buythefarm('Parse Error 3 in "'scriptfile'"')
END
ELSE DO /* POS('r',cliopts) < 1 */
IF OPEN('fp',insertfile,'R') THEN DO
DO UNTIL EOF('fp')
line= STRIP( READLN('fp') )
/*IF WORDS(line) > 0 THEN*/ CALL WRITELN('out',line)
END
CALL CLOSE('fp')
END
ELSE EXIT buythefarm('Failed to open' insertfile)
CALL WRITELN('out',delimiter)
line= ""
DO WHILE (line ~= delimiter) &~ EOF('in')
line= STRIP( READLN('in') )
END
IF line ~= delimiter THEN EXIT buythefarm('Parse Error 4 in "'scriptfile'"')
line= ""
DO WHILE (line ~= terminator) &~ EOF('in')
line= READLN('in')
CALL WRITELN('out',line)
END
END /* POS('r',cliopts) < 1 */
CALL CLOSE('in')
END
ELSE EXIT buythefarm('Could not read from "'scriptfile'"')
CALL CLOSE('out')
END
ELSE EXIT buythefarm('Could not write to "'tempfile'"')
IF POS('r',cliopts) < 1 THEN
ADDRESS COMMAND 'Copy FROM "'tempfile'" TO "'scriptfile'"'
IF EXISTS(tempfile) THEN
ADDRESS COMMAND 'Delete QUIET FILE "'tempfile'"'
EXIT
/**/
bad_args: PROCEDURE EXPOSE template
PARSE ARG str
IF WORDS(str) > 0 THEN SAY str
SAY "Template:" template
RETURN 10
/**/
buythefarm: PROCEDURE EXPOSE tempfile
PARSE ARG str
IF WORDS(str) > 0 THEN SAY str
CALL CLOSE('fp')
CALL CLOSE('in')
CALL CLOSE('out')
IF EXISTS(tempfile) THEN ADDRESS COMMAND 'Delete QUIET' '"'tempfile'"'
RETURN 10
/* get the next command-line argument from global 'args' string */
next_arg: PROCEDURE EXPOSE args
args= STRIP(args)
IF LEFT(args,1) = '"' THEN PARSE VAR args '"' a '"' args
ELSE PARSE VAR args a args
RETURN STRIP(a,'b','"')